package com.textformat.common;

import lombok.extern.slf4j.Slf4j;


import java.io.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

@Slf4j
public class FileUtils {

    public static boolean isTxtFile(String fileName){
        return fileName.endsWith(".txt")
                || fileName.endsWith(".TXT");
    }

    public static boolean isXlsFile(String fileName){
        return fileName.endsWith(".xls")
                || fileName.endsWith(".XLS")
                || fileName.endsWith(".xlsx")
                || fileName.endsWith(".XLSX");
    }

    public static boolean isPdfFile(String fileName){
        return fileName.endsWith(".PDF")
                || fileName.endsWith(".pdf");
    }

    public static boolean isCsvFile(String fileName) {
        return fileName.endsWith(".CSV")
                || fileName.endsWith(".csv");
    }

    /**
     * 按传入分隔符读取文件
     */
    public static List<String> getListBySign(String fileName){
        List<String> lines = new ArrayList<>();
        try {
            Scanner sc = new Scanner(new FileReader(fileName));
            sc.useDelimiter("\\|");  //分隔符
            while (sc.hasNext()) {   //按分隔符读取字符串
                String str = sc.next();
                if(StringUtils.isNotBlank(str))
                    lines.add(str);
            }
        }catch (FileNotFoundException noFile){
            log.info("文本转换器>>> 找不到文件");
        }
        return lines;
    }

    /**
     * 按行读取文件
     */
    public static List<String> getList(String fileName){
        List<String> lines = null;
        try {
            lines = Files.readAllLines(Paths.get(fileName),
                    StandardCharsets.UTF_8);
        }catch (NoSuchFileException noFile){
            log.info("文本转换器>>> 找不到文件"+fileName);
        }catch (IOException e){
            log.error("文本转换器>>> 文件读取中产生异常: "+e.getMessage());
        }
        return lines;
    }

//    // list处理，无顺序，速度快
//    lines.forEach(System.out::println);
//    // list处理，有顺序
//    lines.forEachOrdered(System.out::println);
//    // list处理，大文件适用，内部多线程
//    lines.parallel().forEachOrdered(System.out::println);

    /**
     * 输出为文件
     */

    /**
     * 判断文件是否存在
     */
    public static Boolean exists(String filename) {
        File file = new File(filename);
        if(!file.exists()) {
            log.info("文本转换器>>> 本地文件: "+filename+" 不存在");
            return false;
        }
        return true;
    }

    /**
     * 删除文件
     */
    public static void delete(String filename) throws IOException {
        File file = new File(filename);
        boolean delete = file.delete();
        if (delete) {
            log.info("文本转换器>>> 已删除文件: "+filename);
        }

    }


}
